11

1.Map基本使用

let m = new Map();
m.set('c', 'content')
m.get('c')//content
m.size//1
m.has('c') // true
m.delete('c')
m.has('c')
m.clear()

2.Map结构和数组结构之间的转换

let map = new Map([
  [1, 'one'],
  [2, 'two'],
  [3, 'three'],
]);
[...map.keys()]// [1, 2, 3]
[...map.values()]// ['one', 'two', 'three']
[...map.entries()]// [[1,'one'], [2, 'two'], [3, 'three']]
[...map]// [[1,'one'], [2, 'two'], [3, 'three']]

3.Map 循环遍历
Map 原生提供三个遍历器:

  • keys():返回键名的遍历器。
  • values():返回键值的遍历器。
  • entries():返回所有成员的遍历器。

    let map = new Map([
    ['F', 'no'],
    ['T',  'yes'],
    ]);
    for (let key of map.keys()) {
    console.log(key);
    }
    // "F"
    // "T"
    for (let value of map.values()) {
    console.log(value);
    }
    // "no"
    // "yes"
    for (let item of map.entries()) {
    console.log(item[0], item[1]);
    }
    // "F" "no"
    // "T" "yes"
    // 或者
    for (let [key, value] of map.entries()) {
    console.log(key, value);
    }
    // 等同于使用map.entries()
    for (let [key, value] of map) {
    console.log(key, value);
    }
    上面代码最后的那个例子,表示 Map 结构的默认遍历器接口(Symbol.iterator 属性),就是 entries 方法。
    map[Symbol.iterator] === map.entries // true

    4.js Map和java 的map不一样,内部是按顺序存储

    const m = new Map();
    m.set('key1', 'A');
    m.set('key2', 'B');
    m.set('keyn', 'N');
    //获取第一个(这种方法只能获取第一个)
    console.log(m.keys().next().value); // 'key1'
    console.log(m.values().next().value); // 'A'
    console.log(m.entries().next().value); // [ 'key1', 'A' ]
    //获取任意一个没有直接方法,只能通过转换思路获取(这种方法可以获取任意一个)
    // The key at index 2
    let key = Array.from(m.keys())[2];// 'keyn'
    // The value of the item at index 2
    let val1 = m.get(key); // 'N'
    //获取最后一个的一种方法
     Array.from(map.values()).pop();

    5.如何判断Set和Map等类型

    function getType(obj) {
       var type = Object.prototype.toString.call(obj).match(/^\[object (.*)\]$/)[1].toLowerCase();
       if(type === 'string' && typeof obj === 'object') return 'object'; // Let "new String('')" return 'object'
       if (obj === null) return 'null'; // PhantomJS has type "DOMWindow" for null
       if (obj === undefined) return 'undefined'; // PhantomJS has type "DOMWindow" for undefined
       return type;
     }
    getType(new Map()) // "map"

    6.Shallow-clone

    let clonedMap = new Map(originalMap)

    7.合并多个map

    let merged = new Map([...map1, ...map2, ...map3])

    8.普通object转换成map

    const map = new Map(Object.entries({foo: 'bar'}));
    map.get('foo'); // 'bar'

    9.删除前n个值

    方法一:
    aa = new Map(Array.from(aa).slice(3));
    方法二:
    for (let i = 0; i < 3; i ++) {
      aa.delete(aa.keys().next());
    }

小谷xg
2.3k 声望297 粉丝

明月清风自在怀,任重道远常心态。坎坷人生从容走,否极自有安泰来。